#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QStandardItem>
#include <QItemSelectionModel>
#include <QTableView>
#include "spinboxdelegate.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

//    QT 有对象树机制，尽量手动回收，不手动回收，如果一个对象绑定了父节点，那么会自动交给父节点回收
//    Qt实现自定义的delegate

    // 可以对比下面的两种写法的哦，来一步一步的优化写法二
    // 1. 创建 model 并在 table_view 上显示（官方的写法）
    QStandardItemModel* model = new QStandardItemModel(7, 4, this);
    for(int i = 0; i < 7; i++){
        for(int j = 0; j < 4; j++){
            QStandardItem* item = new QStandardItem(QString("%1").arg(i * 4 + j));
            model->setItem(i, j, item);
        }
    }
    QTableView* table_view = new QTableView;
    table_view->setModel(model);
    setCentralWidget(table_view);
    this->resize(800, 800);

    // 2. 自定义的写法
    spinBoxDelegate* delegate = new spinBoxDelegate(this);
    QStandardItemModel* model2 = new QStandardItemModel(7, 4, this);
    for(int i = 0; i < 7; i++){
        for(int j = 0; j < 4; j++){
            QStandardItem* item = new QStandardItem(QString("%1").arg(i * 4 + j));
            model2->setItem(i, j, item);
        }
    }
    QTableView* table_view2 = new QTableView; //
    table_view2->setModel(model2);
//    setCentralWidget(table_view2);
    table_view->setItemDelegate(delegate); //
    table_view2->show();
    table_view2->resize(800, 800);
}

MainWindow::~MainWindow()
{
    delete ui;
}

